home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / drawer.zip / COMMWELL.PAS < prev    next >
Pascal/Delphi Source File  |  1993-01-04  |  2KB  |  109 lines

  1. {$L-,D-}
  2.  
  3. unit CommWells;
  4.  
  5. interface
  6.  
  7. uses Command, Shape, MSGraph;
  8.  
  9. const
  10.  
  11.     MAXCOMMWELLITEMS = 25;
  12.  
  13. type
  14.  
  15.     CommWell =    object
  16.                     mh, mw : word;                { menu button height and width }
  17.                     color  : word;                { color of command items }
  18.                     NumItems : word;
  19.                     SelItem  : word;
  20.                     Menu : array[1..MAXCOMMWELLITEMS] of Command;
  21.                     procedure Initialize( mh, mw, color : word);
  22.                     procedure SelectItem( w : word);
  23.                     function  SelectedItem : word;
  24.                     procedure AddCommand( s : Shape; f : CommandProc);
  25.                     procedure Draw;
  26.                     procedure Erase;
  27.                     function  PtInRegion( px, py : word) : boolean;
  28.                     procedure Process( px, py : word);
  29.                 end;
  30.  
  31. implementation
  32.  
  33. procedure CommWell.Initialize( mh, mw, color : word);
  34. begin
  35.     self.NumItems := 0;
  36.     self.mh := mh;
  37.     self.mw := mw;
  38.     self.color := color;
  39.     self.SelItem := 0;
  40. end;
  41.  
  42. procedure CommWell.AddCommand( s : Shape; f : CommandProc);
  43. var
  44.     y : word;
  45.     c : Command;
  46. begin
  47.     new(c);
  48.     with self do begin
  49.         y := NumItems * mh;
  50.         c.Initialize( 0, y, mw, mh, color, TRUE, s);
  51.         c.SetProc( f );
  52.         inc( NumItems );
  53.         self.Menu[NumItems] := c;
  54.         inc( y, mh);
  55.         end;
  56. end;
  57.  
  58. procedure CommWell.SelectItem( w : word);
  59. begin
  60.     with self do begin
  61.         if SelItem<>0 then Menu[SelItem].UnSelect;
  62.         SelItem := w;
  63.         if w<>0 then Menu[w].Select;
  64.         end;
  65. end;
  66.  
  67. function CommWell.SelectedItem : word;
  68. begin
  69.     SelectedItem := self.SelItem;
  70. end;
  71.  
  72. procedure CommWell.Draw;
  73. var
  74.     n : word;
  75. begin
  76.     with self do begin
  77.         for n := 1 to NumItems do Menu[n].draw;
  78.         if SelItem<>0 then Menu[SelItem].Select;
  79.         end;
  80. end;
  81.  
  82. procedure CommWell.Erase;
  83. begin
  84.     with self do begin
  85.         if SelItem<>0 then Menu[SelItem].UnSelect;
  86.         _SetColor(0);
  87.         _Rectangle( _GFILLINTERIOR, 0, 0, mw, NumItems*mh);
  88.         end;
  89. end;
  90.  
  91. function CommWell.PtInRegion( px, py : word) : boolean;
  92. begin
  93.     with self do
  94.         PtInRegion := (px <= mw) and (py <= (NumItems*mh));
  95. end;
  96.  
  97. procedure CommWell.Process( px, py : word );
  98. var
  99.     i : word;
  100. begin
  101.     i := (py div self.mh) + 1;
  102.     self.SelectItem( i );
  103.     self.Menu[ i ].DoIt;
  104. end;
  105.  
  106. begin
  107. end.
  108.  
  109.